package model.lugares;

import java.util.ArrayList;
import java.util.Random;

import model.Partida;
import model.parser.pistas.IParseadorPistas;

public class CreadorDeMapa {
	Ciudad actualPolicia;
	Ciudad actualLadron;
	ArrayList<Ciudad> ciudades;
	
	private IParseadorPistas parserDePistasNoSe = Partida.getParser().getParsadorPistasNoSe();
	Random rdm;
	
	public CreadorDeMapa(Ciudad actualPolicia, Ciudad actualLadron) {
		this.actualPolicia = actualPolicia;
		this.actualLadron = actualLadron;
		ciudades = new ArrayList<Ciudad>();
		ciudades.add(actualPolicia);
		ciudades.add(actualLadron);
		rdm = new Random();
	}
	
	private Ciudad obtenerCiudadAleatoreaDistinta(){
		int h,cantidadDeCiudadesDisponibles = Partida.getParser().getCantidadCiudades();//maxima cantidad de ciudades
		Ciudad a=null;
		boolean ciudadYaExisteEnMapa=true;
		while (ciudadYaExisteEnMapa){
			h = rdm.nextInt(cantidadDeCiudadesDisponibles);
			a = Partida.getParser().getCiudadNumero(h);
			
			ciudadYaExisteEnMapa=mapaContieneALaCiudad(a);
		}
		return a;
		
	}
	
	private boolean mapaContieneALaCiudad(Ciudad ciudadAVerificar) {
		
		int i=0;
		for(i=0;i<ciudades.size();i++)
		{
			if (ciudadAVerificar.compareTo(ciudades.get(i))==0)
			{
				return true;
			}
			
		}
				
		return false;
	}

	private MapaActual crearMapaDeXCiudades(int cantDeCiudades){
		ArrayList<Ciudad> ciudadesExtra = new ArrayList<Ciudad>();
		for (int i=0; i<cantDeCiudades-2; i++){
			Ciudad ciudad = obtenerCiudadAleatoreaDistinta();
			for (Edificio edif : ciudad.getEdificios())
				edif.agregarPista(parserDePistasNoSe.obtenerPistaDeLaCiudadDeLaTematica(ciudad, edif.getTematica()));

			
			//ciudad.getEdificios().get(Ciudad.INDEX_E_MONEDA).agregarPista(parserDePistasNoSe.obtenerPistaDeMonedaDeLaCiudad(ciudad));
			//ciudad.getEdificios().get(Ciudad.INDEX_E_PUBLICO).agregarPista(parserDePistasNoSe.obtenerPistaDeBibliotecaDeLaCiudad(ciudad));
			//ciudad.getEdificios().get(Ciudad.INDEX_E_TRANSPORTE).agregarPista(parserDePistasNoSe.obtenerPistaDeTrasporteDeLaCiudad(ciudad));
			
			//carga las ciudades con pistas de yo no vi nada
			ciudades.add(ciudad);
			ciudadesExtra.add(ciudad);
		}
		return new MapaActual(actualPolicia, actualLadron, ciudadesExtra);
	}
	
	
	
	public MapaActual pedirMapaDeCuatroCiudades(){
		return crearMapaDeXCiudades(4);
	}

}
